home *** CD-ROM | disk | FTP | other *** search
- ********************************
- * XMODEM ROUTINES *
- ********************************
- ORG $C000
- * *
- MESAGE MAC
- LDA #<]1
- STA MSGPNT
- LDA #>]1
- STA MSGPNT+1
- JSR DOMSG
- <<<
- CLOSE = $FFC3
- CHKOUT = $FFC9
- CHROUT = $FFD2
- CHKIN = $FFC6
- GETIN = $FFE4
- READST = $FFB7
- ENABL = $02A1
- RSSTB = $029D
- RSETB = $029E
- RSREGO = $F028 ;NON STANDARD CALL
- TIME = $A0
- TICK = TIME+1 ;4SECOND CLOCK
- TOCK = TIME+2 ;JIFFY CLOCK
- SOH = $01
- EOT = $04
- ACK = $06
- NAK = $15
- CAN = $18
- XBUF = $C700
- BLOCKN = XBUF+1
- NBLOCK = XBUF+2
- DATA = XBUF+3
- DATAE = XBUF+130 ;LAST DATA BYTE.
- PCKSUM = XBUF+131
- SHFLAG = $028D
- DBPNT = $61 ;$62
- DEPNT = $63 ;$64
- MSGPNT = $65 ;$66 FAC1
-
- ********************************
- * *
- * HEADER HERE $C000 *
- * *
- ********************************
- * *
- JMP DOWNLOAD
- JMP UPLOAD
- JMP TERMINAL
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
-
-
- BLOCK DFB 0
- CKSUM DFB 0
- TOCHK DFB 0
- LOCPOINT DFB 0
- CANFLAG DFB 0
- SCRUBFLG DFB 0
- CHAR DFB 0
- STAT DFB 0
- EOFLAG DFB 0
- HOLDSB DFB 0
- HOLDY DFB 0
- RAMTMP DFB 0
- DFB 0
- DECTMP DFB $30,$30,$30,$30,$30
-
-
- *
- *
- * RESET TICK TOCK
- RESTT LDA #0
- STA TOCK
- STA TICK
- RTS
- *
- *
- *
- *20 SECOND CLOCK. RETURN NE IF RUNOUT
- TT20
- LDA TICK
- CMP #5
- BGE DING ;BCS
- LDA #0
- RTS
- DING
- LDA #$FF
- RTS
- *
- *
- * 4 SECOND CLOCK
- TT4
- LDA TICK
- CMP #1
- BGE DING
- LDA #0
- RTS
- *
- *
- GET232
- LDX #$05
- JSR CHKIN
- JSR GETIN
- STA CHAR
- JSR READST
- STA STAT
- LDX #$00
- JSR CHKIN
- LDA STAT
- AND #$F7 ;ERRORS?
- BNE EXITRS
- LDA STAT
- AND #$08
- EXITRS RTS ;RET ne IF NO BYTE READ
- *
- * RECIEVE STUFF
- GETBLOCK
- LDA #10 ;10 TRIES
- STA TOCHK
- RENTRY2 LDA #$0
- STA LOCPOINT
- STA CKSUM
- STA SCRUBFLG
- STA CANFLAG
- JSR CLRUP
- JSR RESTT
-
- GETRS232
- LDA SHFLAG
- CMP #$06 ;CTRL KEY
- BEQ CANCEL
- JSR GET232
- BNE NOCHAR
- LDA LOCPOINT
- BNE NOCHECK
- LDA CHAR
- CMP #EOT
- BNE SKP1
- LDA #0
- RTS ;A=0 FINISH
- SKP1
- CMP #CAN
- BEQ CANCEL
- CMP #SOH
- BNE NOCHAR
- NOCHECK
- LDA CHAR
- LDX LOCPOINT
- STA XBUF,X
- INC LOCPOINT
- LDA LOCPOINT
- CMP #PCKSUM+1
- BEQ GOTBLOCK
- JSR RESTT ;RESET CLOCK
- JMP GETRS232 ;JUMP ALWAYS
- CANCEL LDA #$FF
- STA CANFLAG
- RTS
- GOTBLOCK
- LDA #$FF
- RTS
- *
- NOCHAR
- JSR TT20
- BEQ GETRS232 ;TRY AGAIN
- ;OOPS TIMED OUT
- DEC TOCHK
- BEQ SCRUBREC ;FORGET IT
- ;EAT THE DATA
- >>> MESAGE.MSGTOB
- JSR SHOWBLK
- JSR RESTT
- RWAIT4
- JSR GET232 ;JUST FOR FUN
- JSR TT4
- BEQ RWAIT4
- LDA #NAK
- STA CHAR
- JSR SENDCHAR
- JMP RENTRY2
-
- SCRUBREC LDA #$FF
- STA SCRUBFLG
- RTS
- *
- *
- SENDCHAR
- LDX #5 ;RS232
- JSR CHKOUT
- LDX TOCK
- INX
- WAITON
- CPX TOCK
- BNE WAITON
- LDA CHAR
- JSR CHROUT
- LDX #0
- JSR CHKOUT
- RTS
- *
- *
- CHECKSUM ;GUESS
- LDA #0
- LDX #DATAE ;131 BYTES
- CKLP CLC
- ADC XBUF,X
- DEX
- BNE CKLP
- CLC
- ADC XBUF ;LAST ONE
- STA CKSUM
- RTS
- *
- *
- *
- *
- DOWNLOAD
-
-
- >>> MESAGE.DOWNLD
-
- LDA #0
- STA BLOCK
- BADBLOCK LDA #NAK ;FIRST NAK
- BLKLUP STA CHAR
- JSR SENDCHAR
- JSR GETBLOCK
- BNE NUTS ;FINISHED
- JMP DUNN
- NUTS
- LDA CANFLAG
- BEQ BLKLP1
- >>> MESAGE.MSGABT
- JMP BADREC
- BLKLP1
- LDA SCRUBFLG
- BEQ BLKLP2
- >>> MESAGE.MSGCGB
- JMP BADREC
- BLKLP2
- >>> MESAGE.MSGHAB
- JSR SHOWBLK
- CLC
- LDA XBUF
- ADC BLOCKN
- CLC
- ADC NBLOCK
- BEQ BLKLP3
- >>> MESAGE.MSGHNG
- JMP BADBLOCK
- BLKLP3
- LDX BLOCK
- INX
- CPX BLOCKN
- BEQ BLKLP4
- >>> MESAGE.MSGBMM
- JMP BADBLOCK
- BLKLP4
- JSR CHECKSUM
- LDA PCKSUM
- CMP CKSUM
- BEQ BLKLP5
- >>> MESAGE.MSGCHK
- JMP BADBLOCK
- BLKLP5
-
-
- INC BLOCK
- LDA #<DATA
- STA DBPNT
- LDA #>DATA
- STA DBPNT+1
- ;VIDTEX HEADER CHECK
- LDA BLOCK
- CMP #$01 ;FIRST?
- BNE NOVT ;NOPE
- LDA DATA
- CMP #04
- BNE NOVT
- LDA DATA+1
- CMP #00
- BNE NOVT
- LDA DATA+2
- CMP #$43
- BNE NOVT
- LDA DATA+3
- CMP #$43 ;C
- BNE NOVT
- ;MUST BE VIDTEX
- LDA #<DATA+6
- STA DBPNT
- >>> MESAGE.MSGVTX
- NOVT
-
- LDA #<DATAE
- STA DEPNT
- LDA #>DATAE
- STA DEPNT+1
- JSR WRITEOUT
-
-
-
- LDA #ACK
- JMP BLKLUP
- *
- DUNN
-
-
- LDA #8
- JSR CLOSE
- >>> MESAGE.MSGDLD
-
- LDA #ACK
- STA CHAR
- JSR SENDCHAR
- LDA #00 ;EXIT EQ
- RTS ;THE END
- BADREC
- >>> MESAGE.MSGFTC
-
-
-
- LDA #8
- JSR CLOSE
- LDA #CAN
- STA CHAR
- JSR SENDCHAR
- JSR SENDCHAR
- LDA #ACK
- STA CHAR
- JSR SENDCHAR
- LDA #$FF ;EXIT NE
- RTS
- *
- MSGFTC
- DFB $11,$0D
- TXT '[FAILURE TO COMMUNICATE!]'
- DFB $11,$0D,$00
- *
- *
- WRITEOUT
- LDX #8
- JSR CHKOUT
- WOLUP LDY #0
- LDA (DBPNT),Y
- JSR CHROUT
- LDA DBPNT
- CMP DEPNT
- BNE INCDB
- LDA DBPNT+1
- CMP DEPNT+1
- BEQ ENDWO
- INCDB
- INC DBPNT
- BNE WOLUP
- INC DBPNT+1
- JMP WOLUP
-
- ENDWO
- LDX #0
- JSR CHKOUT
- RTS
- *
- *
-
-
-
-
-
- DOWNLD DFB $0D
- TXT +[Chrisdos' XMODEM Download]+
- DFB $00
-
- MSGCHK DFB $0D
- TXT '[CheckSum Error]'
- DFB $00
- MSGHNG DFB $0D
- TXT '[Header No Good]'
- DFB $00
- MSGBMM DFB $0D
- TXT '[Block Mismatch]'
- DFB $00
- MSGCGB DFB $0D
- TXT '[Cant Get Block]'
- DFB $00
- MSGTOB DFB $0D
- TXT '[Time Out - Block] '
- DFB $00
- MSGHAB DFB $0D
- TXT '[Have Block] '
- DFB $00
- MSGVTX DFB $0D
- TXT '[Stripped VIDTEX Header]'
- DFB $00
- MSGDLD DFB $0D
- TXT '[Download Done]'
- DFB $00
- MSGABT DFB 13
- TXT '[*Aborted*]'
- DFB 00
- DOMSG
- LDY #0
- LDA (MSGPNT),Y
- BNE DOMORE
- RTS
- DOMORE
- JSR CHROUT
- INC MSGPNT
- BNE DOMSG
- INC MSGPNT+1
- JMP DOMSG
- ********************************
- ********************************
- ********************************
- ********************************
- UPLOAD
- >>> MESAGE.UPMSG
- LDA #0
- STA BLOCK
- LDA #10
- STA TOCHK ;TRYS
- CANW2
- JSR RESTT
- >>> MESAGE.MSGIRW
- DEC TOCHK
- BNE CANW3
- CANW4
- JMP XSCAN ;TIMEOUT
- CANW3
- LDA SHFLAG
- CMP #$06 ;CTRL C=
- BEQ CANW4
- JSR TT20
- BNE CANW2 ;TIMEOUT
- JSR GET232
- BNE CANW3 ;NO BYTE
- LDA CHAR
- CMP #NAK
- BNE CANW3
- ;CONTINUE
- UPLUP
- LDA #<DATA
- STA DBPNT
- LDA #>DATA
- STA DBPNT+1
- LDA #<DATAE
- STA DEPNT
- LDA #>DATAE
- STA DEPNT+1
- JSR CLRUP
- LDA #11 ;10 TRIES
- STA TOCHK
- JSR LOADBF
- LDA #SOH
- STA XBUF
- INC BLOCK
- LDA BLOCK
- STA BLOCKN
- EOR #$FF
- STA NBLOCK
- JSR CHECKSUM
- LDA CKSUM
- STA PCKSUM
- XSOMT
- DEC TOCHK
- BEQ XSCAN
- JSR XMOSEN
- >>> MESAGE.MSGSEB
- JSR SHOWBLK
- JSR RESTT
- XSWAIT
- LDA SHFLAG
- CMP #$06
- BEQ XSCAN
- JSR TT20
- BNE XSDING
- JSR GET232
- BNE XSWAIT
- ;
- LDA CHAR
- CMP #ACK
- BEQ CKLAST
- CMP #NAK
- BEQ XSOMT
- CMP #CAN
- BEQ XSCAN
- ;
- JMP XSWAIT
- ;
- XSDING
- >>> MESAGE.MSGTOB
- JSR SHOWBLK
- JMP XSOMT
- ;
- ;
- CKLAST
- LDA EOFLAG
- BNE LAST1
- JMP UPLUP
- ;
- LAST1
- LDA #EOT
- STA CHAR
- JSR SENDCHAR
- >>> MESAGE.MSGUPD
- LDA #8
- JSR CLOSE
- LDA #00 ;EXIT EQ
- RTS ;AND OUT
- *
- XSCAN
- LDA #8
- JSR CLOSE
- LDA #CAN
- STA CHAR
- JSR SENDCHAR
- JSR SENDCHAR
- LDA #ACK
- STA CHAR
- JSR SENDCHAR
- >>> MESAGE.MSGABT
- LDA #$FF ;EXIT NE
- RTS ;BAD OUT
- *
- XMOSEN
- LDX #5
- JSR CHKOUT
- LDY #<XBUF-1
- XMOSL
- INY
- STY HOLDY
- LDA XBUF,Y
- JSR CHROUT
- JSR DOSPCN ;SPEED CONTROL
- LDY HOLDY
- CPY #<PCKSUM
- BNE XMOSL
- *
- LDX #0
- JSR CHKOUT
- RTS
- *
- *
- CLRUP
- LDA #$1A ;^Z
- LDY #133
- DY
- DEY
- STA XBUF,Y
- BNE DY
- RTS
- *
- *
- DOSPCN ;SPEED CONTROL
- LDX TOCK ;JIFFY CLOCK
- INX
- DOSP3
- CPX TOCK
- BNE DOSP3 ;1/60 SEC
- LDA ENABL
- AND #$03
- CMP #$03
- BEQ MBXOFF ;MASHED
- JSR GET232
- BNE SPEED
- LDA CHAR
- CMP #$13 ;XOFF
- BNE SPEED
- MBXOFF
- JSR HALTRS
- JSR RESTT
- LDX #0
- JSR CHKOUT
- >>> MESAGE.XOFFED
- DOSP1
- JSR GET232
- BNE DOSP2
- LDA CHAR
- CMP #$11 ;XON
- BEQ SPEED3
- DOSP2
- JSR TT20
- BEQ DOSP1
- ;TIMEOUT
- >>> MESAGE.TOXON
- JSR GORS
- JMP SPEED
- SPEED3
- >>> MESAGE.XONED
- JSR GORS
- *
- SPEED
- LDX #5
- JSR CHKOUT
- RTS
- *
- HALTRS
- LDA RSSTB
- STA HOLDSB
- LDA RSETB
- STA RSSTB
- RTS
- ;
- GORS
- LDA HOLDSB
- CMP RSETB
- BNE GORS1
- RTS ;NOT NEEDED
- GORS1
- STA RSSTB
- JSR RSREGO
- RTS
- UPMSG DFB $0D
- TXT +[Chrisdos' XMODEM Upload]+
- DFB $00
- MSGUPD DFB $0D
- TXT '[Upload Done]'
- DFB $00
- MSGSEB DFB $0D
- TXT '[Sent Block] '
- DFB $00
- MSGIRW DFB $0D
- TXT '[Waiting For NAK]'
- DFB $00
- XOFFED DFB $0D
- TXT '[XOFF]'
- DFB $00
- XONED DFB $0D
- TXT '[XON]'
- DFB $00
- TOXON DFB $0D
- TXT '[Time Out XON]'
- DFB $00
- ********************************
- SHOWBLK
- LDA BLOCK
- STA RAMTMP
- LDA #0
- STA RAMTMP+1
- LDX #0
- LDY #0
- HD1
- LDA #'0
- STA DECTMP,X
- HD2
- SEC
- LDA RAMTMP
- SBC TABDEC,Y
- PHA
- LDA RAMTMP+1
- SBC TABDEC+1,Y
- BCC HD3
- STA RAMTMP+1
- PLA
- STA RAMTMP
- INC DECTMP,X
- JMP HD2
- HD3
- PLA
- INY
- INY
- INX
- CPX #5
- BCC HD1
- LDY #0
- HD4
- LDA DECTMP,Y
- INY
- CPY #5
- BCS HD5
- CMP #'0
- BEQ HD4
- HD5
- STY RAMTMP
- JSR CHROUT
- LDY RAMTMP
- LDA DECTMP,Y
- INY
- CPY #6
- BCC HD5
- *
- LDA #$11
- JSR CHROUT
- LDA #$0D
- JSR CHROUT
- RTS
- *
- TABDEC DA 10000,1000,100,10,1
- ********************************
- LOADBF
- LDX #8
- JSR CHKIN
- LDA #0
- STA EOFLAG
- L2A
- LDA $90 ;STATUS
- AND #$64
- BNE L2F
- JSR GETIN
- LDY #0
- STA (DBPNT),Y
- LDA DBPNT
- CMP DEPNT
- BNE L2G
- LDA DBPNT+1
- CMP DEPNT+1
- BEQ L2H
- L2G
- INC DBPNT
- BNE L2A
- INC DBPNT+1
- JMP L2A
- *
- L2F
- LDA #$FF
- STA EOFLAG
- DEC DBPNT
- CMP DBPNT
- BNE L2H
- DEC DBPNT+1
- L2H
- LDX #0
- JSR CHKIN
- RTS
- ********************************
- ********************************
- ********************************
- ********************************
- ********************************
- TERMINAL
- LDA SHFLAG
- CMP #$06
- BNE NOTOUT
- RTS ;EXIT!
- NOTOUT
- LDA #0
- STA $CC ;CUR BLINK OK
- JSR GET232
- BNE KEYBD
- LDA #$FF
- STA $CC ;CR BLINK OFF
- LSR $CF ;CUR REV?
- BCC ISOK
- LDY $D3 ;LINE OFFSET
- LDX $0287 ;COLOR
- LDA ($D1),Y ;CHAR
- EOR #$80 ;REVERSE
- JSR $EA1C ;BACK TO SCREEN
- ISOK
- LDA CHAR
- AND #$7F
- STA CHAR
- CMP #8 ;BS?
- BNE NOTBS
- LDA #20
- STA CHAR ;DELETE
- NOTBS
- CMP #10 ;LF?
- BNE NOTLF
- JMP TERMINAL
- NOTLF
- CMP #$61 ;ASCII LOWER
- BCC NOTAL
- CMP #$7B
- BCS NOTAL
- SEC
- SBC #32
- STA CHAR
- JMP NOTAU
- NOTAL
- CMP #$41 ;ASCII UPPER
- BCC NOTAU
- CMP #$5B
- BCS NOTAU
- CLC
- ADC #128
- STA CHAR
- *
- NOTAU
- LDA CHAR
- JSR CHROUT
- LDA #0
- STA 212 ;QUOTE MODE OFF
- JMP TERMINAL
- *
- *
- KEYBD
- JSR GETIN
- BEQ TERMINAL
- STA CHAR
- CMP #$41 ;CBM LOWER
- BCC NOTCL
- CMP #$5B
- BCS NOTCL
- CLC
- ADC #32
- STA CHAR
- JMP NOTCBS
- NOTCL
- CMP #$C1
- BCC NOTCU
- CMP #$DB
- BCS NOTCU
- SEC
- SBC #128
- STA CHAR
- NOTCU
- CMP #20
- BNE NOTCBS
- LDA #8
- STA CHAR
- *
- NOTCBS
- JSR SENDCHAR
- JMP TERMINAL
- *
- ASC '*CHRISDOS 1.0*'
- END = *
-